package br.com.foxinline.servico;

import br.com.foxinline.generico.ServicoGenerico;
import br.com.foxinline.modelo.Anexo;
import br.com.foxinline.util.ArquivoUtilitario;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author ely
 */
@Stateless
public class AnexoServico extends ServicoGenerico<Anexo> {

    @EJB
    UsuarioServico usuarioServico;
    private ArquivoUtilitario arquivoUtilitario = new ArquivoUtilitario();

    public AnexoServico() {
        super(Anexo.class);
    }

    @Override
    public void update(Anexo anexo) {

        if (anexo.getArquivo() != null) {

            arquivoUtilitario.gravarAnexo(anexo, anexo.getUrl());

            anexo.setArquivo(null);
            anexo.setContent(null);
        }

        super.update(anexo);
    }

    public Anexo findUUID(String cod) {
        String sql = "SELECT a FROM " + Anexo.class.getSimpleName() + " a WHERE"
                + " a.cod = :cod ";
        Query query = getEntityManager().createQuery(sql);
        query.setParameter("cod", cod);

        try {
            return (Anexo) query.getResultList().get(0);
        } catch (Exception e) {
            return null;
        }
    }

    public boolean existeVariasReferencias(Anexo anexo) {


        String sql = "SELECT a.id FROM " + Anexo.class.getSimpleName() + " a WHERE"
                + " a.nome like :nome and (a.url like :url or (a.urlantiga is not null and a.urlantiga like :url))";
        Query query = getEntityManager().createQuery(sql);
        query.setParameter("nome", anexo.getNome());
        query.setParameter("url", anexo.getUrl());

        if (query.getResultList() != null && query.getResultList().size() > 1) {
            return true;
        } else {
            return false;
        }
    }

    public boolean isImageInvalida(Anexo a) {

        String sql = "SELECT a.id FROM " + Anexo.class.getSimpleName() + " a WHERE"
                + " a.url is null or a.content is null and a.id = :id";
        Query query = getEntityManager().createQuery(sql);
        query.setParameter("id", a.getId());

        if (query.getResultList() != null && query.getResultList().size() > 0) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public List<Anexo> find(Anexo entity, Integer first, Integer pageSize) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void update(List<Anexo> anexos) {

        for (Anexo anexo : anexos) {
            anexo.setDataAtualizacao(new Date());
            anexo.setUsuarioAtualizacao(usuarioServico.getCurrentUser());

            update(anexo);
        }
    }

    public void delete(List<Anexo> anexos) {

        for (Anexo anexo : anexos) {
            anexo.setDataAtualizacao(new Date());
            anexo.setUsuarioAtualizacao(usuarioServico.getCurrentUser());
            anexo.setImovel(null);
            anexo.setImovelCroqui(null);

            super.delete(anexo);
        }
    }

    public Anexo getAnexoPadrao() {
        String url = null;//FacesContext.getCurrentInstance().getExternalContext().getRealPath("/media/images/fox-avatar.png").replace("fox-avatar.png", "");
        Anexo anexo = new Anexo();
        anexo.setTipo("image/png");
        anexo.setArquivo(null);
        anexo.setNome(null);
        anexo.setNomeExibicao(null);
        anexo.setUrl(url);
        return anexo;
    }
}
